Refresh Token কি এবং এর প্রয়োজনীয়তা

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Spring Security এবং JWT Refresh Token Implementation
165

Refresh Token একটি নিরাপদ টোকেন যা Access Token পুনঃপ্রাপ্ত করার জন্য ব্যবহৃত হয়। সাধারণত, Access Token (যা JWT-এ থাকে) একটি নির্দিষ্ট সময় (যেমন, ১ ঘণ্টা) পর্যন্ত বৈধ থাকে এবং পরবর্তী সময়ে এটি expire হয়ে যায়। কিন্তু ব্যবহারকারীকে বারবার লগইন করার পরিবর্তে Refresh Token ব্যবহার করে নতুন Access Token জেনারেট করা যায়।

একটি Refresh Token দীর্ঘ সময়ের জন্য বৈধ থাকে, তবে Access Token-এর মতো এটি সাধারণত ক্লায়েন্ট-সার্ভারে স্টোর করা হয় না। Refresh Token শুধুমাত্র সেই সময়ে ব্যবহার করা হয় যখন Access Token মেয়াদ উত্তীর্ণ হয়ে যায়।


Refresh Token-এর প্রয়োজনীয়তা

  1. Access Token Expiration: Access Token সাধারণত একটি ছোট সময় (যেমন ১ ঘণ্টা) বৈধ থাকে। যদি কোনও ব্যবহারকারী দীর্ঘ সময় ধরে অ্যাপ্লিকেশন ব্যবহার করতে চান, তবে তারা প্রতি Access Token-এর মেয়াদ শেষে পুনরায় লগইন করতে বাধ্য হবে, যা ব্যবহারকারীর জন্য অসুবিধাজনক হতে পারে। Refresh Token-এর মাধ্যমে, ব্যবহারকারী তাদের Access Token পুনরুদ্ধার করতে পারে, যেটি নতুন Access Token তৈরি করতে ব্যবহৃত হয়।
  2. Security:
    • Access Token সাধারণত কম সময়ের জন্য বৈধ থাকে (যেমন ১ ঘণ্টা)। এটি সংক্ষিপ্ত সময়ের জন্য ব্যবহৃত হয়, তাই যদি এটি চুরি হয়, আক্রমণকারী দ্রুত এক্সপায়ার হয়ে যাবে।
    • Refresh Token সাধারণত দীর্ঘ সময়ের জন্য বৈধ থাকে (যেমন কয়েক দিন বা সপ্তাহ)। এটি সিস্টেমের ভিতরে নিরাপদে সংরক্ষিত থাকে এবং শুধুমাত্র Access Token পুনরুদ্ধার করতে ব্যবহৃত হয়। এক্ষেত্রে এটি বিশেষভাবে নিরাপদ, কারণ এটি ব্যবহারকারীকে পুনরায় লগইন করতে বাধ্য না করে।
  3. Stateless Authentication: Refresh Token JWT-এর মতো stateless অথেনটিকেশন মেথডের জন্য গুরুত্বপূর্ণ। সাধারণত JWT ব্যবহার করে আপনি কোনও সেশন ম্যানেজমেন্ট ছাড়াই Authentication পরিচালনা করতে পারেন, তবে JWT-এর অ্যাক্সেস টোকেনের মেয়াদ শেষ হয়ে গেলে ব্যবহারকারীকে আবার লগইন করতে হয়। Refresh Token এর মাধ্যমে, আপনি stateless অথেনটিকেশন সিস্টেমে দীর্ঘকালীন অথেনটিকেশন সাপোর্ট দিতে পারেন।
  4. Seamless User Experience: Refresh Token ব্যবহার করার মাধ্যমে ব্যবহারকারীরা একাধিক বার লগইন না করেও অ্যাপ্লিকেশন ব্যবহার করতে পারে। Access Token-এর মেয়াদ শেষ হয়ে গেলেও, Refresh Token ব্যবহার করে নতুন Access Token তৈরি করা যায়, যা ব্যবহারকারীর অভিজ্ঞতাকে ভালো করে।
  5. Access Tokenের হালনাগাদ: যখন একটি ব্যবহারকারী একটি নতুন Access Token পায়, তখন তার পুরনো Access Token কে বাতিল করা হয়, এবং এটি শুধুমাত্র Refresh Token ব্যবহার করে প্রাপ্ত হয়। এটি সিস্টেমের নিরাপত্তা নিশ্চিত করে, কারণ পুরনো Access Token আর ব্যবহার করা যাবে না।

Refresh Token-এর কার্যপ্রণালী

  1. Login/Authentication:
    • ব্যবহারকারী সঠিক ক্রেডেনশিয়াল দিয়ে লগইন করলে, সার্ভার একটি Access Token এবং একটি Refresh Token প্রদান করে।
  2. Access Token Expiry:
    • ব্যবহারকারী অ্যাপ্লিকেশন ব্যবহার করতে থাকলে, কিছু সময় পর Access Token মেয়াদ শেষ হয়ে যাবে। তখন, অ্যাপ্লিকেশনটি Refresh Token ব্যবহার করে নতুন একটি Access Token রিকোয়েস্ট করবে।
  3. Generate New Access Token:
    • সার্ভার Refresh Token যাচাই করবে এবং যদি এটি বৈধ হয়, তবে নতুন Access Token প্রদান করবে।
  4. Access Control:
    • এক সময়ে একাধিক Access Token বা Refresh Token থাকলে, সেগুলি কেবল তখনই বৈধ হবে যদি তারা সঠিকভাবে যাচাই করা হয় এবং Refresh Token এর মেয়াদ শেষ না হয়ে থাকে।

Spring Security তে Refresh Token ব্যবহার করা

Spring Security-তে JWT ভিত্তিক Refresh Token ইমপ্লিমেন্ট করার জন্য সাধারণত নিচের স্টেপগুলো অনুসরণ করা হয়:

Step 1: JWT Token Utility Class

JWT Utility ক্লাসে Access Token এবং Refresh Token তৈরি ও যাচাই করার জন্য মেথড তৈরি করুন:

public class JwtUtil {
    private final String SECRET_KEY = "mySecretKey";

    public String generateAccessToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60)) // 1 hour validity
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();
    }

    public String generateRefreshToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 7)) // 7 days validity
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();
    }
    
    public boolean validateToken(String token, String username) {
        String extractedUsername = extractUsername(token);
        return (username.equals(extractedUsername) && !isTokenExpired(token));
    }

    private String extractUsername(String token) {
        return extractClaims(token).getSubject();
    }

    private Claims extractClaims(String token) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
    }

    private boolean isTokenExpired(String token) {
        return extractClaims(token).getExpiration().before(new Date());
    }
}

Step 2: Refresh Token Endpoint

একটি কন্ট্রোলার তৈরি করুন যেখানে ব্যবহারকারী তাদের Refresh Token প্রদান করবে এবং নতুন Access Token প্রাপ্ত করবে।

@RestController
public class TokenController {

    @Autowired
    private JwtUtil jwtUtil;

    @PostMapping("/refresh-token")
    public ResponseEntity<?> refreshToken(@RequestParam String refreshToken) {
        String username = jwtUtil.extractUsername(refreshToken);
        
        // Validate Refresh Token (You can check for validity and expiration)
        if (username != null && jwtUtil.validateToken(refreshToken, username)) {
            String newAccessToken = jwtUtil.generateAccessToken(username);
            return ResponseEntity.ok(newAccessToken);
        } else {
            return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Invalid Refresh Token");
        }
    }
}

Step 3: Client-Side Usage

  • প্রথমে, login বা authentication রিকোয়েস্টে Access Token এবং Refresh Token প্রাপ্ত করুন।
  • যখন Access Token মেয়াদ শেষ হয়ে যায়, Refresh Token ব্যবহার করে Access Token পুনরুদ্ধার করুন।

Refresh Token-এর নিরাপত্তা

  1. Storage:
    • Refresh Token সাধারণত সার্ভারে অথবা secure HTTP-only cookie তে সংরক্ষণ করা হয়।
  2. Expiry & Rotation:
    • Refresh Token-এর মেয়াদ শেষ হলে এটি আর ব্যবহারযোগ্য থাকে না।
    • প্রক্রিয়া সম্পন্ন হলে, নতুন Refresh Token তৈরি করা উচিত।
  3. Revoke Mechanism:
    • Refresh Token-এর বিরুদ্ধে revoke বা বাতিল করার ব্যবস্থা থাকা উচিত যদি কোনো নিরাপত্তা সমস্যা ঘটে।

উপসংহার

Refresh Token ব্যবহারকারীর অভিজ্ঞতাকে আরো উন্নত করে এবং দীর্ঘ সময়ের জন্য নিরাপদ অথেনটিকেশন প্রদান করতে সাহায্য করে। এটি JWT এর সাথে যুক্ত করে অ্যাপ্লিকেশনের নিরাপত্তা এবং ব্যবহারকারীর অভিজ্ঞতাকে শক্তিশালী করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...